package com.muyan.thread;

import java.util.List;
import java.util.Vector;
import java.util.concurrent.CountDownLatch;

public class VoucherThread implements Runnable {

	private String ruleid;

	private CountDownLatch latch;

	public VoucherThread(String ruleid,CountDownLatch latch) {
		this.ruleid = ruleid;
		this.latch = latch;
	}

	public void run() {
		// 线程开始
		List<String> listRule = getRule(ruleid);
		for (int i = 0; i < listRule.size(); i++) {
			System.out.println(listRule.get(i));
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		latch.countDown();
	}

	private List<String> getRule(String ruleid) {
//		Vector与ArrayList的源码，看下他们的区别与联系。
//		1、Vector是线程安全的集合类，ArrayList并不是线程安全的类。Vector类对集合的元素操作时都加了synchronized，保证线程安全。
//		2、Vector与ArrayList本质上都是一个Object[] 数组，ArrayList提供了size属性，Vector提供了elementCount属性，他们的作用是记录集合内有效元素的个数。与我们平常调用的arrayList.size()和vector.size()一样返回的集合内有效元素的个数。
//		3、Vector与ArrayList的扩容并不一样，Vector默认扩容是增长一倍的容量，Arraylist是增长50%的容量。
//		4、Vector与ArrayList的remove,add(index,obj)方法都会导致内部数组进行数据拷贝的操作，这样在大数据量时，可能会影响效率。
//		5、Vector与ArrayList的add(obj)方法，如果新增的有效元素个数超过数组本身的长度，都会导致数组进行扩容。
		// List<String> listRule = new ArrayList<String>();
		List<String> listRule = new Vector<String>();
		if ("000001".equals(ruleid)) {
			for (int i = 0; i < 3; i++) {
				listRule.add(Thread.currentThread().getName()+"-000001-"+i);
			}
		}
		if ("000002".equals(ruleid)) {
			for (int i = 0; i < 4; i++) {
				listRule.add(Thread.currentThread().getName()+"-000002-"+i);
			}
		}
		if ("000003".equals(ruleid)) {
			for (int i = 0; i < 5; i++) {
				listRule.add(Thread.currentThread().getName()+"-000003-"+i);
			}
		}

		return listRule;
	}
}
